package com.sprouting.personal.utils;

import com.sprouting.personal.interfaces.common.Constant;
import com.sprouting.personal.model.common.BaseModel;

import java.util.Date;

/**
 * 实体工具类
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2022/7/29 0:04
 */
public class EntityTool {


    /**
     * 保存时自动将继承 BaseModel 的基础数据部分填充完成
     * @param obj 要填充的对象，必须继承自 BaseModel
     * @param createId 创建人
     * @param <T> 继承自 BaseModel 的对象
     * @return 最终返回继承对象
     */
    public static  <T extends BaseModel> T buildSaveBase(T obj, String createId){
        Date now = new Date();
        obj.setCreateId(createId);
        obj.setUpdateId(createId);
        obj.setDelType(Constant.DelType.ADD);
        obj.setCreateTime(now);
        obj.setUpdateTime(now);
        return obj;
    }

    /**
     * 修改时自动将继承 BaseModel 的基础数据部分填充完成
     * @param obj 要填充的对象，必须继承自 BaseModel
     * @param updateId 创建人
     * @param <T> 继承自 BaseModel 的对象
     * @return 最终返回继承对象
     */
    public static  <T extends BaseModel> T buildUpdBase(T obj, String updateId){
        Date now = new Date();
        obj.setUpdateId(updateId);
        obj.setUpdateTime(now);
        return obj;
    }

    /**
     * 删除时自动将继承 BaseModel 的基础数据部分填充完成
     * @param obj 要填充的对象，必须继承自 BaseModel
     * @param createId 创建人
     * @param <T> 继承自 BaseModel 的对象
     * @return 最终返回继承对象
     */
    public static  <T extends BaseModel> T buildDelBase(T obj, String createId){
        Date now = new Date();
        obj.setUpdateId(createId);
        obj.setUpdateTime(now);
        obj.setDelType(Constant.DelType.DEL);
        return obj;
    }
}
